# Архитектура и модель данных ## Общие сведения об архитектуре Системы Global Система Global является классической трехзвенной системой, каждый слой которой может работать под различными операционными системами, в том числе Astra Linux. В качестве СУБД используется PostgreSQL. ![](img/archschema.png) **Клиентский слой** Клиентский слой Системы Глобал работает через любой браузер с поддержкой стандарта HTML5, который обеспечивает взаимодействие с пользователем по принципу терминального доступа и содержит только правила визуализации. Это позволяет работать на как на компьютерах, так и на планшетах через канал с низкой пропускной способностью. Это возможно, так как в терминальном режиме пользователь получает только минимально необходимый для работы набор данных. К примеру, если пользователь открыл список, содержащий 10 000 записей, то к нему на экран будет отправлена только видимая часть и кэш в размере примерно 100-200 записей (зависит от размеров экрана). В браузер может быть установлено дополнительное расширение, позволяющее тонкому клиенту напрямую работать с файлами, оборудованием и крипто провайдерами. В случаи наличия такого расширение работа в браузере неотличима от работы с использованием отдельного клиентского приложения на базе chromium. Также существует линейка мобильных приложений позволяющая использовать полный перечень возможностей мобильного устройства. Мобильные приложения используются в модулях WMS, ТОРО, электронном документообороте и др. **Сервер приложений** Сервер приложений Global разработан на Java. Обеспечивает выполнение интерактивной бизнес-логики, загружаемой с сервера баз данных. Прикладная бизнес-логика разрабатывается с использованием языка SCALA в среде Intelij IDEA. Поддержка горизонтального масштабирования реализована за счет подключения дополнительных серверов приложений, собираемых в кластер серверов приложений для централизованного управления и мониторинга. Имеется балансировщик нагрузки, который распределяет пользователей между серверами приложений в кластере. **Система управления базами данных** На уровне СУБД PostgreSQL осуществляется хранение пользовательских данных, а также хранение части метаданных, отвечающих за бизнес-логику, печатные формы, настройки интерфейса пользователя. Поддерживается работа с PostgreSQL версии 10 и выше. На стороне СУБД PostgreSQL версии Pro может быть реализован кластер (средствами СУБД). ## Принципиальная схема Общее устройство сервера приложений системы приведено на следующей диаграмме: ![](img/principalchema.png) Ключевыми элементами принципиальной схемы являются: - **Графическое представление**: Вид интерфейса определяется по средством декларации пользовательского интерфейса. Реакция на пользовательские действия программируется на уровне интерактивной бизнес логики. - **Прикладная бизнес логика**: Располагается по большей части в слое автономной бизнес логики. Прикладная бизнес логика группируется по модулям, классам и пакетам. - **Метаданные**: Объекты автономной и интерактивной бизнес логики регистрируются в базе данных, в слои мета данных, что позволяет выполнять администрирование и кэширования элементов бизнес логики при необходимости. - **Система администрирования**: Определяет права доступа пользователя к интерактивной и автономной бизнес логики - **Система развертывания**: Отвечает за создание и обновление схемы базы данных. ## Модульность Модуль представляет собой некоторую совокупность функциональности системы, сгруппированную по принципу логической общности. Каждый объект, зарегистрированный в системе, принадлежит какому-либо модулю. Основными составляющими модуля являются классы, бизнес-объекты и выборки данных. Модуль может использовать или требовать наличия некоторого набора других модулей. Это требование выражается в том, что объекты, или функциональность, заложенная в модуль, не будут работать в случае отсутствия в системе другого, требуемого модуля. Этот принцип позволяет разнести модули на верхнеуровневые и низкоуровневые – по градации их использования. Самым низкоуровневым является модуль ядра системы (BTK), он не требует для своей работы наличия других модулей и требуется для функционирования любого другого модуля, являясь платформой системы. К низкоуровневым модулям относятся общеиспользуемые модули, реализующие функциональность, востребованную во многих подсистемах, это модули BS (базовые справочники), CUR (валюты и курсы) и т.п. Высокоуровневые модули – это модули, которые реализуют определенную бизнес-логику и являются основой работы подсистем. Например, подсистема Global-Stock функционирует на основе высокоуровневого модуля STK, а подсистема Global-Payment функционирует на основе двух высокоуровневых модулей – STM и PM. Высокоуровневые модули по возможности изолированы друг от друга и не требуют наличия других высокоуровневых модулей для своей работы. Этот принцип является основой масштабируемости системы. Перечень модулей, установленных в системе, можно посмотреть из приложения «Настройка системы», пункт меню «Сущности»\«Модули». Лицензирование в системе Global осуществляется на модули. Из любого запущенного приложения можно посмотреть перечень лицензированных модулей при помощи вызова пункта главного меню «Помощь»\«О приложении», закладка «Лицензия», подзакладка «Доступные модули» ## Классы Класс является хранилищем совокупности объектов, имеющих одинаковые характеристики, подчиняющихся общим настройкам и операциям, функционирующих в рамках единой логики. Каждому классу соответствует своя таблица базы данных, поэтому он определяет правила хранения и обработки данных, хранящихся в этой таблице. Класс должен иметь уникальное имя в пределах системы. Имя класса должно быть не более 24 символов и максимально точно передавать сущность объектов, являющихся экземплярами данного класса. Имя класса должно задаваться английским словом или сокращением нескольких слов в единственном числе, именительном падеже. В имя класса необходимо включать аббревиатуру модуля класса, затем символ подчеркивания. Класс содержит набор атрибутов, которые могут быть как значимыми (предназначенными для ввода значения определенного типа данных), так и ссылочными (предназначенными для выбора значения атрибута из справочника или другого множества). Помимо этих двух простейших типов атрибутов, атрибуты класса могут иметь переменную ссылочность, поддерживать ссылочность на другой класс, определять состояние объектов класса. Класс позволяет существенно ускорить разработку бизнес логики, ориентированной на работу с данными. Программисту достаточно объявить перечень атрибутов класса чтобы за счет кода генерации получить набор готовых сервисов. ![](img/classobjects.png) Перечень объектов, генерируемых системой на основе каждого класса: - **Доменная автономная бизнес логика (dpi)**: Содержит код генерацию для автономной бизнес логики - **Каркас прикладной автономной логики (api)**: scala класс с постфиксом Api, в котором пишется автономная бизнес логика для работы с классом. Наследуется от Dpi - **Доменная разметка выборки (dvm, dvi)**: Содержит сгенерированную по умолчанию разметку основных отображений выборки (список, карточка), а также код всех типовых и сервисных операций. - **Прикладной уровень реализации пользовательского интерфейса (avm, avi)**: Содержит разметку выборки, переопределенную разработчиком. Также содержит код всех дополнительных операций и переопределение кода типовых операций. - **Интеграция с Orm**: Включает в себя Pojo объект для хранения данных в кэше и Aro объект интеграции pojo в фреймворк ## Бизнес-объекты Бизнес-объект (БО) - объединение нескольких классов и их коллекций в группу для более удобного манипулирования ими при работе с кэшем и конфигурировании вспомогательных сервисов. Бизнес объект позволяет: - Массово загружать данные в транзакционный кэш. - Для бизнес объекта можно указать стратегию загрузки данных, существенно уменьшающую количество запросов в базу данных. Так как запросы пойдут не по каждому объекту, а по каждому классу бизнес объекта. - Настраивать права доступа. - По бизнес объекту создается административный объект, на котором можно массово выдать привилегии для всех классов бизнес объекта. - Управлять электронной подписью. - Можно настроить правила подписи всего бизнес объекта включая не только заголовок, но и все вложенные коллекции. - Настраивать интеграцию и репликацию. ## Выборки Выборка определяет правило получения, отображение данных и обеспечивает взаимодействие с пользователем. Выборки содержат основную часть интерактивной бизнес логики. Выборка определяет: - Способ получения данных - Способ отображения данных пользователю - Бизнес логику обработки пользовательских действий Выборка может создаваться от класса с использованием кода генерации или вручную. Пользовательский интерфейс приложения является совокупностью экземпляров отображений выборок. Отображение – представляет группирует бизнес логику выборки в зависимости от способа представления данных. Стандартные отображения для класса: - Default – отображение по умолчанию. В данном отображении определена функциональность общая для данных выборки. Остальные отображения выборки обычно наследуют это отображение. - List – отображение для списка объектов класса - Card – отображение для карточки объекта и т.д. ### Отношение экземпляров выборок Экземпляры выборок, открытые в приложении, связаны друг с другом в отношении мастер-деталь. Это означает, что одна выборка всегда является подчиненной к другой выборке. Подчиненная выборка имеет доступ к параметрам и данным мастер выборки. Корнем выборок экземпляра приложения – является выборка главного меню. Все остальные выборки являются подчиненными к ней. Выборка, являющаяся корнем формы, имеет доступ к данным главного меню. Экземпляры выборок внутри формы также выстраиваются в иерархии мастер-деталь, в соответствии с бизнес логикой отображения. ![](img/seelctions.png) ### Доступность параметров главных выборок в подчиненных выборках Иерархическая структура создаваемых объектов (выборок) позволяет обеспечивать доступность и передачу параметров по отношению «мастер-деталь», а также производить автоматическое обновление при изменении используемых параметров. Параметры экземпляров выборок – это, прежде всего, атрибуты (поля) их датасета. Также это могут быть дополнительно созданные параметры, или специальные параметры фреймов. Параметры мастер-выборок автоматически становятся доступны в детальных выборках. При этом, главная выборка является общим, наиболее высокоуровневым мастером, поэтому в ней имеет смысл создавать наиболее общие параметры, используемые всем приложением. Обращение к параметру непосредственного мастера осуществляется прибавлением к имени параметра префикса ```super$```. При этом, если необходимо обратиться к параметру мастер-выборки своей собственной мастер-выборки (т.е. перепрыгнуть через один экземпляр выборки), необходимо использовать префикс ```super$super$```. В случае, если при любом из обращений к параметру он не будет найден, произойдет автоматический поиск параметра по дереву отношений «мастер-деталь» выборок вплоть до тех пор, пока мы не найдем этот параметр, или не дойдем до главной выборки приложений. Поэтому, при создании глобальных параметров на уровне главной выборки приложения, для них имеет смысл давать уникальное имя, а затем обращаться к ним из любого места приложения используя один единственный префикс ```super$```. ## Приложения Приложение является коренной выборкой рабочего сеанса пользователя и задает: - **Главное меню**: Содержит перечень форм, отчетов и операций - **Панель быстрого доступа**: Содержит операции быстрого доступа, а также поля, задающие контекст работы рабочего сеанса, например рабочий период Пользователь при входе в систему выбирает требуемое ему для работы приложение из перечня доступных. Перечень приложений доступных для пользователя задается администратором системы. ## Взаимодействие с данными и кэширование Общая схема взаимодействия сессии приложения с данными и с кэшем представлена на следующей схеме: ![](img/dataschema.png) Пояснения: - **Объектный запрос**: Запрос данных через JQPL. Данные, запрошенные на данном языке попадают в транзакционный кэш что позволяет их редактировать. Применяется к примеру в карточке документа. - **Реляционный запрос**: Запрос в базу данных на языке sql, позволяет использовать аналитические функции, и сложную фильтрацию. Применяется к примеру в списках. - **Транзакционный кэш**: Перечень запрошенных объектов в текущей сессии. - **Orm кэш**: Кэш разделяемых объектов. На классе можно включить режим кэширование в разделяемом кэше. Применяется на классах типизации, для снижения нагрузки на базу. - **Файловый кэш**: Повторяемые вычисления можно кэшировать в файловом кэше. ## Типы объектов Тип объекта – элемент системы, который используется для дополнительной типизации классов и позволяет на основании одного класса настраивать разные объекты в системе (документы, справочники), которые имеют одинаковую базовую логику работы. При этом логика работы для разных типов объектов одного класса может несколько видоизменяться. Тип объекта является неотъемлемой частью практически любого документа или справочника системы и выступает сущностью, которая позволяет для документа или справочника гибко настраивать: - закладки, которые должны выводиться в интерфейсе; - печатные формы, доступные для формирования из интерфейса; - переходы состояний; - обязательность заполнения атрибутов; - дополнительные характеристики; - правила для автоматического вычисления значений атрибутов. Перечисленные выше настройки доступны для всех типов объектов системы. Однако в зависимости от класса, к которому принадлежит тип объекта, система может предоставлять возможность дополнительных настроек. Например, для договоров есть возможность настраивать аналитики, я для документов модуля «Документооборот» появляется ряд дополнительных настроек, скомпонованных на закладке «Настройки документа WF». Одна из основных настроек – это настройка закладок, которые будут выводиться для настраиваемого типа объекта. Закладки, доступные настройки разделяются на универсальные, которые применяются для всех классов системы и закладки, специфический для класса. К универсальным закладкам относятся: - Прикрепленные файлы – позволяет прикреплять к объекту файлы, сформированные в сторонних приложениях, а также просматривать уже добавленные файлы. - Связанные документ - на закладке выводятся другие документы системы, связанные с текущим. - Маршрут – на закладке выводится перечень процессов документооборота, запущенного от данного документа. - Подписи – закладка, на которой настраиваются подписи для документооборота. - Проводки – закладка, на которой выводятся бухгалтерские проводки, сформированные по документу. - Характеристики – Закладка с настроенными для данного типа объекта характеристиками.